#include "AdministradorClientes.h"

AdministradorClientes::AdministradorClientes(bool atachado) :
		Thread(atachado) {
	this->torneo = NULL;
}

AdministradorClientes::~AdministradorClientes() {
}

void AdministradorClientes::run() {
	signal(SIGURG, AdministradorClientes::signalHandler);
	this->recibirPeticion();
	pthread_exit(0);
}

void AdministradorClientes::signalHandler(int signal){
	switch (signal){
	case SIGURG:
		pthread_exit(NULL);
	}
}

void AdministradorClientes::recibirPeticion() {
	Torneo* torneo = this->torneo;
	while (!this->torneo->isFinalizado()) {
		//Me quedo a la espera de peticiones de clientes
		int clientId = torneo->getSocket()->acceptClient();
		this->torneo->getTorneoLogger()->info(string("Aceptando cliente: ") + NumberToString(clientId));
		//Genero un thread que esperará que el cliente envie su nombre.
		CreadorJugador* creadorCliente = new CreadorJugador(false);
		//Seteo el clietId donde escuchará
		creadorCliente->setClientId(clientId);
		creadorCliente->setTorneo(this->torneo);
		//Inicio el hilo
		creadorCliente->start();
	}
}

Torneo* AdministradorClientes::getTorneo() {
	return torneo;
}

void AdministradorClientes::setTorneo(Torneo* torneo) {
	this->torneo = torneo;
}
